package Day_0201.JUC;

/**
 * @author zxc
 * @date 2023/02/01 16:06
 **/
public class Thread_Sequential_execution {
    public static void main(String[] args) {
        /**
         * 如何保证线程t1，t2，t3的顺序执行？
         * ===》
         * （1）在多线程中有多种方法让线程按特定顺序执行，
         * （2）用线程类的join()方法在一个线程中启动另一个线程，另外一个线程等待该线程完成后 继续执行。
         *  为了确保三个线程的顺序你应该先启动最后一个(T3调用T2，T2调用T1)，这样T1就会先完成而T3最后完成;
         *
         *  总结 ：
         *  为保证线程顺序执行，可以使用join方法，使得某个线程等待另一个线程执行完毕后，再继续执行;
         */
        final Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("t1");
            }
        });

        final Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 引用t1线程，等待t1线程执行完
                    t1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("t2");
            }
        });
        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 引用t2线程，等待t2线程执行完
                    t2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("t3");
            }
        });
        t1.start();
        t2.start();
        t3.start();
    }
}
